// 管理员模型
import { DataTypes } from 'sequelize'
import { sequelize } from '../../db/index.js'
import bcrypt from 'bcrypt'

const Admin = sequelize.define('Admin', {
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true,
    comment: '管理员ID'
  },
  username: {
    type: DataTypes.STRING(50),
    allowNull: false,
    unique: true,
    comment: '管理员用户名'
  },
  password: {
    type: DataTypes.STRING,
    allowNull: false,
    comment: '管理员密码（加密）',
    set(value) {
      // 密码加密处理
      const hashedPassword = bcrypt.hashSync(value, 10);
      this.setDataValue('password', hashedPassword);
    }
  },
  email: {
    type: DataTypes.STRING,
    allowNull: true,
    validate: {
      isEmail: true
    },
    comment: '管理员邮箱'
  },
  avatar: {
    type: DataTypes.STRING,
    allowNull: true,
    defaultValue: '/uploads/default-avatar.png',
    comment: '管理员头像地址'
  },
  role: {
    type: DataTypes.ENUM('super', 'normal'),
    defaultValue: 'normal',
    comment: '管理员角色：super - 超级管理员，normal - 普通管理员'
  },
  status: {
    type: DataTypes.ENUM('active', 'inactive'),
    defaultValue: 'active',
    comment: '状态：active - 活跃，inactive - 禁用'
  },
  last_login: {
    type: DataTypes.DATE,
    allowNull: true,
    comment: '上次登录时间'
  }
}, {
  tableName: 'admin',
  timestamps: true,
  paranoid: true, // 软删除
  underscored: true,
  indexes: [
    {
      name: 'idx_username',
      fields: ['username']
    }
  ]
});

// 实例方法：验证密码
Admin.prototype.validatePassword = function(password) {
  // 确保密码和散列值都是字符串类型
  if (typeof password !== 'string' || typeof this.password !== 'string') {
    return false;
  }
  
  try {
    return bcrypt.compareSync(password, this.password);
  } catch (error) {
    console.error('密码验证错误:', error);
    return false;
  }
};

export default Admin;